#include "jeuTexte.h"

void decouvrirGrilleTexte(const Grille * jeu, int * x, int * y)
{
    printf("Coordonnees X : ");
    scanf("%d", x);
    printf("Coordonnees Y : ");
    scanf("%d", y);

	while(estDecouverte(jeu->cases[*y * getDimX(jeu) + *x]) || (*x > getDimX(jeu)-2) || (*y > getDimY(jeu)-2))
	{
	    printf("Mauvaises coordonnees !\n");
		printf("Coordonnees X : ");
   		scanf("%d", x);
    	printf("Coordonnees Y : ");
    	scanf("%d", y);
	}
}

void afficherGrilleTexte(const Grille * jeu)
{
	int i;
	int j;

	system("clear");

	/* Affichage ligne coordonnees X */
	printf("    ");
	for(i = 1; i < getDimX(jeu) - 1; i++)
		printf("%3d",i);
	printf("\n\n");
	
	/* Affichage jeu */
    for(j = 1 ; j < getDimY(jeu) - 1; j++)
	{
		printf("%2d   ", j); /* Affichage colone coordonnees Y */
		
		for(i = 1; i < getDimX(jeu) - 1; i++)
		{
			if(estDecouverte(jeu->cases[j * getDimX(jeu) + i]))
			{
				if(getValeur(jeu->cases[j * getDimX(jeu) + i]) == MINE)
				{
					printf(" M ");

				}
				else
				{
					printf(" %d ", getValeur(jeu->cases[j * getDimX(jeu) + i]));
				}
			}
			else
			{
				printf(" - ");
			}
		}

		printf("\n");
	}
}

int jouerTexte(Grille * jeu)
{
	int x, y;
	int ret, cases_restantes = 1;
	int perdu = FALSE;
	char rejouer;
	
	afficherGrilleTexte(jeu);

	while(cases_restantes >0 && !perdu)
	{
        cases_restantes = calculCasesRestantes(jeu);
		printf("Nombre de cases restantes : %d \n", cases_restantes);
		
		decouvrirGrilleTexte(jeu, &x, &y);
		ret = traitementGrille(jeu, x, y);
		if(ret == MINE)
			perdu = TRUE;
        else
			cases_restantes = ret;
			
		afficherGrilleTexte(jeu);
	}

	if(cases_restantes == 0)
		printf("\nGagne \n");
	else
		printf("\nPerdu \n");
	
	do
	{
		scanf("%c",&rejouer); /* vide le tampon */
	}
	while(rejouer != '\n');
	
	printf("\nRejouer ? (O/N) : ");
	scanf("%c", &rejouer);
	rejouer = toupper(rejouer);
	if(rejouer == 'O')
		return TRUE;
	else
		return FALSE;
}

void menuTexte(int *dimx, int *dimy, int *nmine)
{
	int choix;
	
	printf("Choix du Niveau\n");
	printf("1 - Facile : 8 x 8, 10 mines\n");
	printf("2 - Moyen : 16 x 16, 40 mines\n");
	printf("3 - Difficile : 30 x 16, 99 mines\n");
	printf("4 - Personnalise\n");
	printf("Choisissez votre niveau : ");
	scanf("%d", &choix);
	
	switch(choix)
	{
		case 1:
			*dimx = 10;
			*dimy = 10;
			*nmine = 10;
			break;
		case 2:
			*dimx = 18;
			*dimy = 18;
			*nmine = 40;
			break;
		case 3:
			*dimx = 32;
			*dimy = 18;
			*nmine = 99;
			break;
		case 4:
			printf("Largeur : ");
			scanf("%d",dimx);
			printf("Hauteur : ");
			scanf("%d",dimy);
			printf("Nombre de mines : ");
			scanf("%d",nmine);
			break;
		default:
			system("clear");
			printf("Choix inexistant\n");
			menuTexte(dimx,dimy,nmine);
			break;
	}
}

void resoudreGrille(Grille * jeu)
{
	int i,j;

	for(j = 1; j < getDimY(jeu)- 1; j++)
	{
		for(i = 1; i < getDimX(jeu) - 1; i++)
		{
		    if(getValeur(jeu->cases[j * getDimX(jeu) + i]) != MINE)
                printf(" %d ", getValeur(jeu->cases[j * getDimX(jeu) + i]));
            else
                printf(" M ");
		}
		printf("\n");
	}
	printf("\n");
}
